电子文档解析

电子文档解析接口从文档本身的半结构化内容中解析出所包含的信息,提供包括pdf、word、excel、html、epub、mobi、markdown、txt的电子解析能力,生成文档智能中支持的结构化对象。本文介绍了电子文档解析API的调用方式。在调用OpenAPI接口前,请先阅读API使用指南

调用方式

电子文档解析接口为同步接口,调用SubmitDigitalDocStructureJob或者SubmitDigitalDocStructureJobAdvance接口均可进行同步任务提交,等待超时时间可设置为5分钟。

说明

支持的格式:html、pdf、ppt、pptx、xlsx、xls、doc、docx、mobi、epub、markdown、txt。

调用电子文档解析提交服务SubmitDigitalDocStructureJob接口

同步提交服务支持上传本地文件和url文件两种方式:

  • 本地文件上传的同步提交服务接口为:SubmitDigitalDocStructureJobAdvance接口。

  • url上传的同步提交服务接口为:SubmitDigitalDocStructureJob接口。

请求参数

名称

类型

必填

描述

示例值

FileUrl

string

以文档url方式时使用。单个文档限制大小为150MB以内,页数1.5万页以内。

https://example.com/example.xlsx

FileUrlObject

stream

以本地文件上传方式调用接口时使用。单个文档限制大小为100MB以内,页数为1000页以内。

本地文件生成的FileInputStream

FileName

string

文件名需带文件类型后缀,与fileNameExtension二选一。

example.xlsx

FileNameExtension

string

文件类型,与fileName二选一。

xlsx

RevealMarkdown

boolean

是否输出markdown类型文本。

true

ImageStrategy

String

markdownContent中图片存储方式。

url:提供oss url(含有效期)

base64: 提供base64字段

UseUrlResponseBody

bool

是否以url方式返回结果,默认为false。

true

重要
  • 开启markdown输出后,ImageStrategy才能生效。ImageStrategy参数用于控制markdown内图片存储方式,base64适合较小文件,建议小于1M的图片使用base64。推荐使用url,但注意url会有时效期,一般为12小时。

  • 根据您计算机的规格大小,如果上传的文件较大或者文件内容较多 ,建议开启UseUrlResponseBody,可以有效避免接口超时等问题,但注意url会有时效期,一般为12小时。

返回参数

名称

类型

描述

示例值

RequestId

string

请求唯一ID。

43A29C77-405E-4CC0-BC55-EE694AD0****

Id

String

订单ID。

docmind-20220712-b15f****

Status

String

同步任务处理完成的状态,最终处理结束后的状态。Success为处理成功,Fail为处理失败。

Success

Data

map

返回数据,电子解析的解析结果,输出包括文档内容及样式、文档逻辑信息(层级树)的JSON数据结构返回。

-

Code

string

状态码。

200

Message

string

详细信息。

Message

使用示例

本接口支持本地文档上传和传入文档url这两种调用方式。

  • 以Java SDK为例,本地文档上传调用方式的请求示例代码如下,调用电子文档解析提交服务SubmitDigitalDocStructureJobAdvance接口,通过fileUrlObject参数实现本地文档上传。

    说明

    获取并使用AccessKey信息的方式,可参考SDK概述中不同语言的SDK使用指南。

    import com.aliyun.docmind_api20220711.models.*;
    import com.aliyun.teaopenapi.models.Config;
    import com.aliyun.docmind_api20220711.Client;
    import com.aliyun.teautil.models.RuntimeOptions;
    import java.io.File;
    import java.io.FileInputStream;
    
    public static void main(String[] args) throws Exception {
            submit();
        }
    public static void submit() throws Exception {
        // 使用默认凭证初始化Credentials Client。
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
        Config config = new Config()
            // 通过credentials获取配置中的AccessKey ID
            .setAccessKeyId(credentialClient.getAccessKeyId())
            // 通过credentials获取配置中的AccessKey Secret
            .setAccessKeySecret(credentialClient.getAccessKeySecret());
        // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
        config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
        Client client = new Client(config);
        // 创建RuntimeObject实例并设置运行参数
        RuntimeOptions runtime = new RuntimeOptions();
        SubmitDigitalDocStructureJobAdvanceRequest request = new SubmitDigitalDocStructureJobAdvanceRequest();
        File file = new File("D:\\example.xlsx");
        request.fileUrlObject = new FileInputStream(file);
        request.fileName = "example.xlsx";
        request.revealMarkdown=true;
        // 发起请求并处理应答或异常。                                    
        SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJobAdvance(request, runtimeOptions);
        System.out.println(JSON.toJSON(response.getBody()));
    }
    const Client = require('@alicloud/docmind-api20220711');
    const Credential = require('@alicloud/credentials');
    const Util = require('@alicloud/tea-util');
    const fs = require('fs');
    
    const getResult = async () => {
    	// 使用默认凭证初始化Credentials Client
      const cred = new Credential.default();
      const client = new Client.default({
        // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
        endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
        // 通过credentials获取配置中的AccessKey ID
        accessKeyId: cred.credential.accessKeyId,
        // 通过credentials获取配置中的AccessKey Secret
        accessKeySecret: cred.credential.accessKeySecret,
        type: 'access_key',
        regionId: 'cn-hangzhou'
      });
      
      const advanceRequest = new Client.SubmitDigitalDocStructureJobAdvanceRequest();
      const file = fs.createReadStream('./example.pdf');
      advanceRequest.fileUrlObject = file;
      advanceRequest.fileName = 'example.pdf';
      const runtimeObject = new Util.RuntimeOptions({});
      const response = await client.submitDigitalDocStructureJobAdvance(advanceRequest, runtimeObject);
    	return response.body;
    };
    from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
    from alibabacloud_tea_util.client import Client as UtilClient
    from alibabacloud_tea_util import models as util_models
    from alibabacloud_credentials.client import Client as CredClient
    
    if __name__ == '__main__':
      	# 使用默认凭证初始化Credentials Client。
        cred=CredClient()
        config = open_api_models.Config(
            # 通过credentials获取配置中的AccessKey ID
            access_key_id=cred.get_credential().get_access_key_id(),
            # 通过credentials获取配置中的AccessKey Secret
            access_key_secret=cred.get_credential().get_access_key_secret()
        )
        # 访问的域名
        config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
        client = docmind_api20220711Client(config)
        request = docmind_api20220711_models.SubmitDigitalDocStructureJobAdvanceRequest(
            # file_url_object : 本地文件流
            file_url_object=open("./example.xlsx", "rb"),
            # file_name :文件名称。名称必须包含文件类型
            file_name='123.xlsx',
            reveal_markdown=True,
            # file_name_extension : 文件后缀格式。与文件名二选一
            # file_name_extension='xlsx'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            response = client.submit_digital_doc_structure_job_advance(request, runtime)
            # API返回值格式层级为 body -> data -> 具体属性。
            print(response.body)
        except Exception as error:
            # 如有需要,请打印 error
            UtilClient.assert_as_string(error.message)  
    import (
    	"fmt"
    	"os"
      
    	openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    	"github.com/alibabacloud-go/docmind-api-20220711/client"
    	"github.com/alibabacloud-go/tea-utils/v2/service"
      "github.com/aliyun/credentials-go/credentials"
    )
    
    func submit(){
     // 使用默认凭证初始化Credentials Client。
    	credential, err := credentials.NewCredential(nil)
    	// 通过credentials获取配置中的AccessKey ID
    	accessKeyId, err := credential.GetAccessKeyId()
    	// 通过credentials获取配置中的AccessKey Secret
    	accessKeySecret, err := credential.GetAccessKeySecret()
      // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
      var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
    	config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint}
    	// 初始化client
      cli, err := client.NewClient(&config)
    	if err != nil {
    		panic(err)
    	}
      // 上传本地文档调用接口
      filename := "D:\\example.pdf"    
      f, err := os.Open(filename)
    	if err != nil {
        panic(err)
    	}
      // 初始化接口request
      request := client.SubmitDigitalDocStructureJobAdvanceRequest{
    		FileName:      &filename,
    		FileUrlObject: f,
    	}
      // 创建RuntimeObject实例并设置运行参数
      options := service.RuntimeOptions{}
      response, err := cli.SubmitDigitalDocStructureJobAdvance(&request, &options)
      if err != nil {
    		panic(err)
    	}
      // 打印结果
    	fmt.Println(response.Body.String())
    }
    using Newtonsoft.Json;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Threading.Tasks;
    
    using Tea;
    using Tea.Utils;
    
      public static void SubmitFile()
            {
                // 使用默认凭证初始化Credentials Client。
              	var akCredential = new Aliyun.Credentials.Client(null);
                AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                {
                    // 通过credentials获取配置中的AccessKey Secret
                    AccessKeyId = akCredential.GetAccessKeyId(),
                    // 通过credentials获取配置中的AccessKey Secret
                    AccessKeySecret = akCredential.GetAccessKeySecret(),
                };
                // 访问的域名
                config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
                AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
                   //需要安装额外的依赖库--> AlibabaCloud.DarabonbaStream        
        				Stream bodySyream = AlibabaCloud.DarabonbaStream.StreamUtil.ReadFromFilePath("<YOUR-FILE-PATH>");
                AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest
                {
                    FileUrlObject = bodySyream,
                    FileNameExtension = "pdf"
                };
                AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                try
                {
                    // 复制代码运行请自行打印 API 的返回值
                    client.SubmitDigitalDocStructureJobAdvance(request, runtime);
                }
                catch (TeaException error)
                {
                    // 如有需要,请打印 error
                    AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                }
                catch (Exception _error)
                {
                    TeaException error = new TeaException(new Dictionary<string, object>
                    {
                        { "message", _error.Message }
                    });
                    // 如有需要,请打印 error
                    AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                }
            }
  • 以Java SDK为例,传入文档url调用方式的请求示例代码如下,调用SubmitDigitalDocStructureJob接口,通过fileUrl参数实现传入文档url。请注意,您传入的文档url必须为公网可访问下载的url地址,无跨域限制,url不带特殊转义字符。

    说明

    获取并使用AccessKey信息的方式,可参考SDK概述中不同语言的SDK使用指南。

    import com.aliyun.docmind_api20220711.models.*;
    import com.aliyun.teaopenapi.models.Config;
    import com.aliyun.docmind_api20220711.Client;
    
    public static void main(String[] args) throws Exception {
            submit();
        }
    public static void submit() throws Exception {
        // 使用默认凭证初始化Credentials Client。
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
        Config config = new Config()
            // 通过credentials获取配置中的AccessKey ID
            .setAccessKeyId(credentialClient.getAccessKeyId())
            // 通过credentials获取配置中的AccessKey Secret
            .setAccessKeySecret(credentialClient.getAccessKeySecret());
        // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
        config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
        Client client = new Client(config);
        SubmitDigitalDocStructureJobRequest request = new SubmitDigitalDocStructureJobRequest();
        request.fileName = "example.xlsx";
        request.fileUrl = "https://example.com/example.xlsx";
        request.revealMarkdown=true;
        SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJob(request);
        System.out.println(JSON.toJSON(response.getBody()));
    }
    const Client = require('@alicloud/docmind-api20220711');
    const Credential = require('@alicloud/credentials');
    
    const getResult = async () => {
    	// 使用默认凭证初始化Credentials Client
      const cred = new Credential.default();
      const client = new Client.default({
        // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
        endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com',
        // 通过credentials获取配置中的AccessKey ID
        accessKeyId: cred.credential.accessKeyId,
        // 通过credentials获取配置中的AccessKey Secret
        accessKeySecret: cred.credential.accessKeySecret,
        type: 'access_key',
        regionId: 'cn-hangzhou'
      });
      
      const request = new Client.SubmitDigitalDocStructureJobRequest();
      request.fileName = 'example.pdf';
      request.fileUrl = 'https://example.com/example.pdf';
      const response = await client.submitDocStructureJob(request);
      
      return response.body;
    }
    from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
    from alibabacloud_tea_util.client import Client as UtilClient
    from alibabacloud_credentials.client import Client as CredClient
    
    if __name__ == '__main__':
      	# 使用默认凭证初始化Credentials Client。
        cred=CredClient()
        config = open_api_models.Config(
            # 通过credentials获取配置中的AccessKey ID
            access_key_id=cred.get_credential().get_access_key_id(),
            # 通过credentials获取配置中的AccessKey Secret
            access_key_secret=cred.get_credential().get_access_key_secret()
        )
        # 访问的域名
        config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
        client = docmind_api20220711Client(config)
        request = docmind_api20220711_models.SubmitDigitalDocStructureJobRequest(
            # file_url : 文件url地址
            file_url='https://example.com/example.xlsx',
            # file_name :文件名称。名称必须包含文件类型
            file_name='123.xlsx',
            reveal_markdown=True,
            # file_name_extension : 文件后缀格式。与文件名二选一
            # file_name_extension='xlsx'
        )
        try:
            # 复制代码运行请自行打印 API 的返回值
            response = client.submit_digital_doc_structure_job(request)
            # API返回值格式层级为 body -> data -> 具体属性。
            print(response.body)   
        except Exception as error:
            # 如有需要,请打印 error
            UtilClient.assert_as_string(error.message) 
    import (
    	"fmt"
    
    	openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      "github.com/alibabacloud-go/docmind-api-20220711/client"
      "github.com/aliyun/credentials-go/credentials"
    )
    
    func submit(){
      // 使用默认凭证初始化Credentials Client。
    	credential, err := credentials.NewCredential(nil)
    	// 通过credentials获取配置中的AccessKey ID
    	accessKeyId, err := credential.GetAccessKeyId()
    	// 通过credentials获取配置中的AccessKey Secret
    	accessKeySecret, err := credential.GetAccessKeySecret()
      // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
      var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com"
    	config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint}
    	// 初始化client
      cli, err := client.NewClient(&config)
    	if err != nil {
    		panic(err)
    	}
      // 文件URL
      fileURL := "https://example.com/example.pdf"
      // 文件名
      fileName := "example.pdf"
      // 初始化接口request
      request := client.SubmitDigitalDocStructureJobRequest{
    		FileUrl:  &fileURL,
    		FileName: &fileName,
    	}
      response, err := cli.SubmitDigitalDocStructureJob(&request)
      if err != nil {
    		panic(err)
    	}
      // 打印结果
    	fmt.Println(response.Body.String())
    }
    using Newtonsoft.Json;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Threading.Tasks;
    
    using Tea;
    using Tea.Utils;
    
    public static void SubmitUrl()
            {
                // 使用默认凭证初始化Credentials Client。
              	var akCredential = new Aliyun.Credentials.Client(null);
                AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                {
                    // 通过credentials获取配置中的AccessKey Secret
                    AccessKeyId = akCredential.GetAccessKeyId(),
                    // 通过credentials获取配置中的AccessKey Secret
                    AccessKeySecret = akCredential.GetAccessKeySecret(),
                };
                // 访问的域名
                config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
                AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config);
                AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest
                {
                    FileUrl = "https://example.pdf",
                    FileNameExtension = "pdf"
                };
                try
                {
                    // 复制代码运行请自行打印 API 的返回值
                    client.SubmitDigitalDocStructureJob(request);
                }
                catch (TeaException error)
                {
                    // 如有需要,请打印 error
                    AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                }
                catch (Exception _error)
                {
                    TeaException error = new TeaException(new Dictionary<string, object>
                    {
                        { "message", _error.Message }
                    });
                    // 如有需要,请打印 error
                    AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                }
            }
    use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi;
    use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitDocStructureJobRequest;
    use Darabonba\OpenApi\Models\Config;
    use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
    use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
    use AlibabaCloud\Credentials\Credential;
    
    // 使用默认凭证初始化Credentials Client。
    $bearerToken = new Credential();    
    $config = new Config();
    // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
    $config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com";
    // 通过credentials获取配置中的AccessKey ID
    $config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId();
    // 通过credentials获取配置中的AccessKey Secret
    $config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret();
    $config->type = "access_key";
    $config->regionId = "cn-hangzhou";
    $client = new Docmindapi($config);
    $request = new SubmitDigitalDocStructureJobRequest();
    
    $runtime = new RuntimeOptions();
    $runtime->maxIdleConns = 3;
    $runtime->connectTimeout = 10000;
    $runtime->readTimeout = 10000;
    
    $request->fileName = "example.pdf";
    $request->fileUrl = "https://example.com/example.pdf";
    
    try {
      $response = $client->submitDigitalDocStructureJob($request, $runtime);
      var_dump($response->toMap());
    } catch (TeaUnableRetryError $e) {
      var_dump($e->getMessage());
      var_dump($e->getErrorInfo());
      var_dump($e->getLastException());
      var_dump($e->getLastRequest());
    }

处理成功后Status返回值为Success,表示处理成功。处理成功返回结果示例如下:

{
  "data":{
    "docInfo":{
      "pageCountEstimate":3,
      "docType":"pdf"
    },
    "styles":[ ],
    "layouts":[
      {
        "pos":[
          {
            "x":0,
            "y":0
          },
          {
            "x":1113,
            "y":0
          },
          {
            "x":1113,
            "y":1440
          },
          {
            "x":0,
            "y":1440
          }
        ],
        "index":0,
        "subType":"none",
        "text":"",
        "type":"image",
        "pageNum":[
          0
        ],
        "uniqueId":"31128703ac73c52f05717b3b654de020"
      },
      {
        "pos":[
          {
            "x":0,
            "y":0
          },
          {
            "x":1113,
            "y":0
          },
          {
            "x":1113,
            "y":1440
          },
          {
            "x":0,
            "y":1440
          }
        ],
        "index":0,
        "subType":"none",
        "text":"",
        "type":"image",
        "pageNum":[
          1
        ],
        "uniqueId":"25b2a6f63bdf57f0d7a4f3da67c8616a"
      },
      {
        "pos":[
          {
            "x":0,
            "y":0
          },
          {
            "x":1113,
            "y":0
          },
          {
            "x":1113,
            "y":1440
          },
          {
            "x":0,
            "y":1440
          }
        ],
        "index":0,
        "subType":"none",
        "text":"",
        "type":"image",
        "pageNum":[
          2
        ],
        "uniqueId":"8c651c04c72a029b4be4ed80aa57fbbd"
      }
    ],
    "version":"1.2.0",
    "requestId":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX"
  },
  "requestId":"1556A10B-E31C-5B21-8A5E-2179069D2XXX",
  "id":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX",
  "status":"Success"
}

具体的处理结果在Data节点中,如下为Data节点的具体格式:

Data

object

解析结果

styles

array

样式列表(全文档中block的去重样式列表)。

styleId

int

样式ID。

underline

bool

是否有下划线。

deleteLine

bool

是否有删除线。

bold

bool

是否加粗。

fontSize

int

字号大小。

fontName

string

字体名称。

color

string

文字颜色。

charScale

float

对齐宽高比例尺字体高度不变的情况下,宽度会有变化,计算逻辑为宽/高。

layouts

array

版面信息列表。

uniqueId

string

版面信息唯一ID。

index

int

版面阅读顺序。

type

string

版面类型(text/table/image)。

text

string

文本内容。

markdownContent

string

markdown 文本内容(开启参数后支持)。

alignment

string

间距枚举。

pos

array

坐标。

pageNum

array

版面所在页数(可能多页)。

numCol

int

表格总列数(表格版面类型特有)。

numRow

int

表格总行数(表格版面类型特有)。

cells

string

单元格信息(类型是表格才有)。

cellId

string

单元格Id(单个版面信息中唯一)。

cellUniqueId

string

单元格Id(全局唯一)。

type

string

单元格类型。

alignment

string

单元格对齐方式。

pageNum

array

单元格所在页数(可能多页)。

xsc

int

起始单元格横向是第几列。

ysc

int

起始单元格纵向是第几行。

xec

int

结束单元格横向是第几列。

yec

int

结束单元格纵向是第几行。

pos

array

单元格坐标。

text

string

单元格文本内容。

layouts

array

内嵌版面信息。

logics

array

逻辑信息列表。

docTree

array

层级树信息列表。

uniqueId

string

层级树节点的唯一ID。

level

int

节点层级。

link

object

子节点。

backlink

object

父节点。

docInfo

object

文档信息。

docType

string

文档类型。

imageCount

int

图片数量。

tableCount

int

表格数量。

pageCountEstimate

int

文档页数。

paragraphCount

int

段落数量。

tokens

long

英文单词数,或中文字数。

docUrl

string

文档url地址。

orignalDocName

string

用户提供的原始文档名称。

originalDocUrl

string

用户提供的原始文档url地址。

pages

array

文档页面列表。

场景示例

本内容阐述获取JSON后,场景处理使用上建议和方案。

获取markdown信息

GetDocStructureResult设置RevealMarkdown为true,ImageStrategy为url。

import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]

markdown_str = ""
for layout in doc_json["layouts"]:
  markdown_str += layout["markdownContent"] + "\n"
print(markdown_str)

获取指定层级内容

SubmitDocStructureJob/SubmitDocStructureJobAdvance接口中,设置doc_tree或default,用于获取文档的结构信息。

yuque_diagram.jpg

import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]
doc_tree = doc_json["logics"]["docTree"]
layout_cache: {} = {}
for layout in doc_json["layouts"]:
    layout_cache[layout["uniqueId"]] = layout
    layout["children"] = list()

for node in doc_tree:
    father = node["backlink"]["上级"][0]
    child = node["uniqueId"]
    if father in layout_cache:
        # 设置 子layout
        layout_cache[father]["children"].append(layout_cache[child])
for layout in doc_json["layouts"]:
    # 当前layout下的子layout
    print(layout["children"])

附录

doc-json数据结构

VERSION(STRING: DOC-JSON版本信息)

Doc-json

styles(array:无重复的样式集合)

layouts(array:版面信息列表,不包含坐标信息)

logics(object:逻辑信息,只含层级树)

doclnfo(object:文档信息)

version(string:doc-json版本信息)

版面类型

文档智能解析返回结果中,版面的类型type及子类型subType列表如下:

type(类型)

类型描述

subType(子类型)

子类型描述

title

标题

table

表格

text

普通文字

para

段落

figure

图表

图片

head

页眉

page_header

页眉

foot_pagenum

页脚页码

page

页码